//version que funcionaaaa
package net.exofire.is3ong;

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author IS3 2008 Equipo 2
 * Pauliiiiiiii
 */
public class AccessMysql {
   
   Connection conn;
   CallableStatement proc;
   Statement sent;
   ResultSet res;
   int resultProce;
   PreparedStatement pstmt;
   
   public AccessMysql (String url, String bd, String login, String password) throws Exception{
       
       Class.forName("com.mysql.jdbc.Driver").newInstance();
       conn = DriverManager.getConnection(url + "/" + bd,login,password);

       if (conn != null) {
        sent = conn.createStatement();
       }
   }
     public PreparedStatement prepararStatement(String consulta) throws SQLException{
       pstmt=conn.prepareStatement(consulta);
       return pstmt;
   }
  
   public void query (String q) throws Exception{
        
            res = sent.executeQuery(q);
        
   }
   public void update (String u) throws Exception{
        
            sent.executeUpdate(u);
   }
   
   public void procedureAltaPersonal (String dni, String nombre, String ape1,
                                       String ape2, String tlf, String email,
                                       String direccion,Date fnacimineto) 
                                       throws Exception{

        proc = conn.prepareCall("{call alta_personal(?,?,?,?,?,?,?,?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setString(2, dni);
        proc.setString(3, nombre);
        proc.setString(4, ape1);
        proc.setString(5, ape2);
        if (tlf==null) proc.setNull(6, java.sql.Types.VARCHAR);
        else proc.setString(6, tlf);
        if (email==null) proc.setNull(7, java.sql.Types.VARCHAR);
        else proc.setString(7, email);
        if (direccion==null) proc.setNull(8, java.sql.Types.VARCHAR);
        else proc.setString(8, direccion);
        proc.setDate(9, fnacimineto);
        proc.execute();
        resultProce = proc.getInt(1);
    }

    public void procedureBajaPersonal (String dni) throws Exception{
        proc = conn.prepareCall("{call baja_personal(?, ?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setString(2, dni);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    
    public void procedureEditarPersonal (String dni, String dni_nuevo, String nombre, 
                                         String apell1, String apell2, String tfno, String email,
                                         String direccion,Date fnacimineto) 
                                         throws Exception {

        proc = conn.prepareCall("{call editar_personal(?,?,?,?,?,?,?,?,?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setString(2, dni);
        proc.setString(3, dni_nuevo);
        proc.setString(4, nombre);
        proc.setString(5, apell1);
        proc.setString(6, apell2);
        proc.setString(7, tfno);
        proc.setString(8, email);
        proc.setString(9, direccion);
        proc.setDate(10, fnacimineto);
        proc.execute();
        resultProce = proc.getInt(1);
    }
   
    public void procedureBuscarPersonalDNI (String dni) throws Exception{

        proc = conn.prepareCall("{call buscar_personal_dni(?, ?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setString(2, dni);
        proc.execute();
        resultProce = proc.getInt(1);
    }
      
    public void procedureBuscarPersonalNombre (String nombre) throws Exception{

        proc = conn.prepareCall("{call buscar_personal_nombre(?, ?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setString(2, nombre);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    public ResultSet buscarPersonal(String consulta) throws Exception{
            query(consulta);
            res = (ResultSet) getResultSentence();
            return res;
    }
    
     public ResultSet comprobar_acceso(String user, String passwd) throws Exception{
            
        query("SELECT Perfil_aplicacion FROM acceso WHERE Login='" +user+ "' AND Contrasena='"+passwd+"';");
        res = (ResultSet) getResultSentence();
        return res;
    }
    
     //---------------------TAREASSSS----------------------//   
    public void procedureCrearTarea (int id_proy, String nombre, 
                                        String descripcion, float presup) 
                                       throws Exception{

        proc = conn.prepareCall("{call crear_tarea(?, ?, ?, ?, ?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setInt(2, id_proy);
        proc.setString(3, nombre);
        proc.setString(4, descripcion);
        if (presup<0) presup=0;
        proc.setFloat(5, presup);
        proc.execute();
        resultProce = proc.getInt(1);
    }
       
    public void procedureEditarTarea (int id_tarea, String nombre, 
                                      String descripcion, float presup) 
                                      throws Exception{

        proc = conn.prepareCall("{call editar_tarea(?, ?, ?, ?, ?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setInt(2, id_tarea);
        proc.setString(3, nombre);
        proc.setString(4, descripcion);
        if (presup<0) presup=0;
        proc.setFloat(5, presup);
        proc.execute();
        resultProce = proc.getInt(1);
    }

        public void procedureEliminarTarea(int id_tarea) throws SQLException{
        proc=conn.prepareCall("{call eliminar_tarea(?,?)}");
        proc.registerOutParameter(1,java.sql.Types.INTEGER);
        proc.setInt(2, id_tarea);
        proc.execute();
        resultProce=proc.getInt(1);    
    }
    public void procedureIniciarTarea(int id_tarea) throws SQLException{
        proc=conn.prepareCall("{call iniciar_tarea(?,?)}");
        proc.registerOutParameter(1,java.sql.Types.INTEGER);
        proc.setInt(2,id_tarea);
        proc.execute();
        resultProce=proc.getInt(1);    
    }
    public void procedureFinalizarTarea(int id_tarea) throws SQLException{
        proc=conn.prepareCall("{call finalizar_tarea(?,?)}");
        proc.registerOutParameter(1,java.sql.Types.INTEGER);
        proc.setInt(2,id_tarea);
        proc.execute();
        resultProce=proc.getInt(1);     
    }

    public void procedureFijarDirector(int id_tarea,String dni,String tipo) throws SQLException{
       proc=conn.prepareCall("{call fijar_director(?,?,?,?)}"); 
       proc.registerOutParameter(1,java.sql.Types.INTEGER);
       proc.setInt(2, id_tarea);
       proc.setString(3,dni);
       proc.setString(4,tipo);
       proc.execute();
       resultProce=proc.getInt(1);     
   }
   
    public void procedureTrabajaPersonalTarea(int id_tarea,String dni,String tipo) throws SQLException{
        proc=conn.prepareCall("{call trabaja_personal_tarea(?,?,?,?)}"); 
        proc.registerOutParameter(1,java.sql.Types.INTEGER);
        proc.setInt(2, id_tarea);
        proc.setString(3,dni);
        proc.setString(4,tipo);
        proc.execute();
        resultProce=proc.getInt(1);  
    }
    
    public void procedureFinalizarPersonalTarea(int id_tarea,String dni) throws SQLException{
        proc=conn.prepareCall("{call finalizar_personal_tarea(?,?,?)}"); 
        proc.registerOutParameter(1,java.sql.Types.INTEGER);
        proc.setInt(2, id_tarea);
        proc.setString(3,dni);
        proc.execute();
        resultProce=proc.getInt(1); 
    }
    
    public void procedureEliminarPersonalTarea(int id_tarea,String dni) throws SQLException{
        proc=conn.prepareCall("{call eliminar_personal_tarea(?,?,?)}"); 
        proc.registerOutParameter(1,java.sql.Types.INTEGER);
        proc.setInt(2, id_tarea);
        proc.setString(3,dni);
        proc.execute();
        resultProce=proc.getInt(1); 
    }
    public void procedureAñadirGastoTarea(int id_tarea,float cantidad, String descripcion) throws SQLException{
        proc=conn.prepareCall("{call anadir_gasto_tarea(?,?,?,?)}"); 
        proc.registerOutParameter(1,java.sql.Types.INTEGER);
        proc.setInt(2, id_tarea);
        if (cantidad<0) cantidad=0;
        proc.setFloat(3,cantidad);
        if (descripcion==null) proc.setNull(4, java.sql.Types.VARCHAR);
        else proc.setString(4,descripcion);
        proc.execute();
        resultProce=proc.getInt(1);
       
    }
    public void procedureEliminarGastoTarea( int id_tarea,int id_gasto) throws SQLException{
        
        proc=conn.prepareCall("{call eliminar_gasto_tarea(?,?,?)}"); 
        proc.registerOutParameter(1,java.sql.Types.INTEGER);
        proc.setInt(2, id_tarea);
        proc.setInt(3, id_gasto);
        proc.execute();
        resultProce=proc.getInt(1); 
    }
    
  
   
    
   
//----------------------------------------------------//
    public ResultSet getResultSentence () {
       return res;
    }
   
    public int getResultProcedure () {
        return resultProce;
    }
   
    @Override
    protected void finalize() throws SQLException {
 
            if (conn != null) {
                conn.close();
                sent.close();
            }
    }
    
   //-----------------------FUNCIONES PARA GESTION DE PERSONAL------------------// 
    public ResultSet mostrar_personal(int est) throws Exception {
        
        if(est==1){
                query("SELECT DNI,Nombre,Apellido1,Apellido2,Telefono,Email,Fecha_baja FROM personal ;");
                res = (ResultSet) getResultSentence();
           
        }else{
                query("SELECT DNI,Nombre,Apellido1,Apellido2,Telefono,Email,Fecha_baja FROM personal WHERE Fecha_baja IS NULL;");
                res = (ResultSet) getResultSentence();
                
        }
        return res;
    }
    
    public ResultSet obtener_datosDni(String dni) throws Exception{
  
            query("SELECT Nombre,Apellido1,Apellido2,Telefono,Email,Fecha_baja FROM personal WHERE DNI='" + dni + "';");
            res = (ResultSet) getResultSentence();
            return res;
    }
    
    public ResultSet obtener_datosNombre(String nombre) throws Exception{
     
            query("SELECT Nombre,Apellido1,Apellido2,Telefono,Email,Fecha_baja FROM personal WHERE Nombre='" + nombre + "';");
            res = (ResultSet) getResultSentence();
            return res;
    }
    
    
    public ResultSet obtener_datosFila(String dni) throws Exception{
   
            query("SELECT Fecha_alta,Fecha_baja,direccion, Fecha_Nacimiento FROM personal WHERE DNI='" + dni + "';");
            res = (ResultSet) getResultSentence();
            return res;
    }
    
    public ResultSet obtener_datosFilaNA(String nombre,String ape1,String ape2) throws Exception{
   
            query("SELECT DNI,Fecha_alta,Fecha_baja,direccion, Fecha_Nacimiento FROM personal WHERE Nombre='" +nombre+ "' AND Apellido1='"+ape1+"' AND Apellido2='"+ape2+"';");
            res = (ResultSet) getResultSentence();
            return res;
    }
    
    public void renovar_alta(String dni) throws Exception{
            System.out.println(dni);
            update("UPDATE personal SET Fecha_baja=null WHERE DNI='" + dni + "';");   
    }
    
    //-----------------------------------------------------------------------//
    //-----------------------FUNCIONES PARA GESTION DE TAREAS------------------//
    
    public ResultSet obtener_tareasProyecto(int id_proyecto) throws Exception{
        query("SELECT IDtarea,Nombre,Estado,Fecha_inicio,Fecha_fin,Presupuesto FROM tarea WHERE IDproyecto='" +id_proyecto + "'AND Estado!='Eliminado';");
        res = (ResultSet) getResultSentence();
        return res;
    }
     public ResultSet obtener_idtarea(String nombre,String estado,String descripcion,float presup) throws Exception{
         query("SELECT IDtarea FROM tarea WHERE Nombre='" + nombre +
               "' AND Estado='" + estado + "' AND Presupuesto='" +
                presup + "';");

         res = (ResultSet)getResultSentence();
         return res;
     }
     public ResultSet obtener_descripcionTarea(int id_tarea) throws Exception{
        query("SELECT Descripcion FROM tarea WHERE IDtarea='" + id_tarea + "'  ;");
        res= (ResultSet)getResultSentence();
        return res;
      }
     public ResultSet obtener_dniTarea(int id_tarea) throws Exception{
        query("SELECT DNI FROM dirige WHERE IDtarea='" + id_tarea + "'  ;");
        res = (ResultSet)getResultSentence();
        return res;
     }
     
     public ResultSet obtener_trabajadorTarea(int id_tarea) throws Exception {
        
          query("SELECT DNI,Fecha_inicio,Fecha_fin,Tipo FROM trabaja WHERE IDtarea='" + id_tarea + "' ;");
          res = (ResultSet) getResultSentence();
          return res;
    }
    public ResultSet obtener_suma_gastos(int id_tarea) throws Exception{
        query("SELECT IDtarea,SUM(Cantidad) FROM gastos WHERE IDtarea='" + id_tarea + "'" +
                "GROUP BY IDtarea ;");
        res=(ResultSet) getResultSentence();
        return res;
    }
    public ResultSet obtener_gastos_tarea(int id_tarea) throws Exception{
        query("SELECT IDgasto,Cantidad,Descripcion FROM gastos WHERE IDtarea='" + id_tarea + "';");
        res=getResultSentence();
        return res;
    }

     public ResultSet obtener_idtarea(String nombre,String estado,String descripcion,float presup,float gastos) throws Exception{
         query("SELECT IDtarea FROM tarea WHERE Nombre='" + nombre +
               "' AND Estado='" + estado + "' AND Presupuesto='" +
                presup + "' AND Gastos='" + gastos + "' ;");

         res = (ResultSet)getResultSentence();
         return res;
     }
     public ResultSet obtener_IDgasto(String descripcion,float gasto) throws Exception{
         query("SELECT IDgasto FROM gastos WHERE Cantidad='" + gasto+
               "' AND Descripcion='" + descripcion + "' ;");
         res = (ResultSet)getResultSentence();
         return res;
     }
      //-------------------------------EVENTOS---------------------------------//
   //(OUT ret INT(1),p_nombre VARCHAR(45), p_tipo INTEGER,p_lugar VARCHAR(100),p_duracion INTEGER, 
   //     p_fecha_ini DATE, p_fecha_fin DATE ,p_descripcion VARCHAR(500), p_dni VARCHAR(9))
         //-------------------------------EVENTOS---------------------------------//
    public void procedureCrearEvento(String nombre,int tipo,String lugar, int duracion,Date fini,Date ffin,
            String descripcion) throws SQLException{
        
        proc = conn.prepareCall("{call crear_evento(?,?, ?, ?, ?, ?, ?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setString(2, nombre);
        proc.setInt(3, tipo);
        if(lugar==null)proc.setNull(4,java.sql.Types.VARCHAR);
        else proc.setString(4,lugar);
        proc.setInt(5, duracion);
        proc.setDate(6, fini);
        proc.setDate(7, ffin);
        if (descripcion==null) proc.setNull(8, java.sql.Types.VARCHAR);
        else proc.setString(8, descripcion);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    
    
    public void procedureFijarResponsable(int idevento ,String dni) throws SQLException{
        System.out.println("Entramos en fijar ersponsable");
        proc = conn.prepareCall("{call fijar_responsable(?,?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setInt(2, idevento);
        proc.setString(3, dni);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    
    public void procedureEditarEvento(int idevento ,String nombre,String descripcion,int tipo,String estado,
            String lugar,int duracion,Date fini,Date ffin) throws SQLException{
        
        proc = conn.prepareCall("{call editar_evento(?,?,?, ?, ?, ?, ?, ?,?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setInt(2,idevento);
        proc.setString(3,nombre);
        if (descripcion==null) proc.setNull(4, java.sql.Types.VARCHAR);
        else proc.setString(4, descripcion);
        proc.setInt(5,tipo);
        proc.setString(6,estado);
        if(lugar==null)proc.setNull(7,java.sql.Types.VARCHAR);
        else proc.setString(7,lugar);
        proc.setInt(8,duracion);
        proc.setDate(9,fini);
        proc.setDate(10,ffin);
        proc.execute();
        resultProce = proc.getInt(1);
    }

    public void procedureCancelarEvento(int idevento ) throws SQLException{
        
        proc = conn.prepareCall("{call cancelar_evento(?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setInt(2, idevento);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    public void procedureFinalizarEventos() throws SQLException{
        proc = conn.prepareCall("{call finalizar_eventos(?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    
    public ResultSet jPEvenMostrarEventos() {
     
        try {
            query("SELECT Nombre,Tipo,Estado,Lugar,Duracion,Fecha_inicio,Fecha_fin FROM evento ;");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        return res;
    }
    
    public ResultSet jPEvenObtenerDatosFila(String nombre,String tipos_e,String estados_e,String lugar_e,int duracion,Date fini,Date ffin) {
        
        try {
            query("SELECT IDevento,Descripcion,personal_DNI FROM evento WHERE Nombre='"+nombre+"' " +
                    "AND Tipo='"+tipos_e+"' AND Estado='"+estados_e+"' AND Lugar='"+lugar_e+"' AND Duracion='"+
                    duracion+"' AND Fecha_inicio='"+fini+"' AND Fecha_fin='"+ffin+"';");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        return res;
    }


//---------------------PROYECTOSS-----------------------//
    public ResultSet obtener_proyectos(){
        try {
            query("SELECT Nombre,Coste_total,Subvencion,Fecha_inicio,Fecha_fin FROM PROYECTO;");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
       return res; 
    }
    
    public ResultSet obtener_datos_proyecto(String nombre, float coste, float subvencion, Date fini, Date ffin){
        try {
            query("SELECT Pais,Estado,IDcategoria,Fecha_inicio,Fecha_fin FROM PROYECTO;");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
       return res; 
    }    

    public ResultSet jPProyObtener_categorias(){
        try {
            query("SELECT Nombre FROM CATEGORIA;");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
       return res; 
    }
    
    public void procedureCrearProyecto(String nombre,String descripcion,int categoria, String pais) throws SQLException{
        
        proc = conn.prepareCall("{call crear_proyecto(?,?,?,?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setString(2, nombre);
        proc.setString(3, descripcion);
        proc.setInt(4, categoria);
        if (pais==null) proc.setNull(5, java.sql.Types.VARCHAR);
        else proc.setString(5, pais);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    public void procedureCrearTareaInicial(int idproyecto) throws SQLException, Exception{
        
        proc = conn.prepareCall("{call crear_tarea_inicial(?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setInt(2, idproyecto);
        proc.execute();
        resultProce = proc.getInt(1);
    }
  
    public int procedureObtenerIdProyecto() throws SQLException{
        int r=0;
        try {
            query("SELECT IDproyecto FROM PROYECTO WHERE IDproyecto=LAST_INSERT_ID();");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        if(res.next()){
            r=Integer.valueOf(res.getObject("IDproyecto").toString());
        }
        return r;
    }
    
    public int procedureObtenerIDcategoria(String n) throws SQLException{
        int r=0;
        try {
            query("SELECT IDcategoria FROM CATEGORIA WHERE Nombre='"+n+"';");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        if(res.next()){
            r=Integer.valueOf(res.getObject("IDcategoria").toString());
        }
        return r;
    }
    
    
    public String procedureObtenerNombreCategoria(int id) throws SQLException{
        String r="";
        try {
            query("SELECT Nombre FROM CATEGORIA WHERE IDcategoria="+id+";");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        if(res.next()){
            r=res.getObject("Nombre").toString();
        }
        return r;
    }
    
    
    
    public void procedureEliminarProyecto(int idproyecto) throws SQLException, Exception{
        
        proc = conn.prepareCall("{call eliminar_proyecto(?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setInt(2, idproyecto);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    
    public ResultSet jPProyObtenerDatosFilaModelo(String nombre){
        try {
            query("SELECT IDproyecto,IDcategoria,Pais,Descripcion,Estado FROM PROYECTO WHERE Nombre='"
                    +nombre+"';");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
   
       return res; 
    }
    
    public void procedureFijarResponsableProyecto(int idproyecto,String dni) throws SQLException, Exception{
        
        proc = conn.prepareCall("{call fijar_responsable_proyecto(?,?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setInt(2, idproyecto);
        proc.setString(3, dni);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    
    public String jPProyObtenerDniResponsable(int id) throws SQLException{
        String r="";
        try {
            query("SELECT DNI FROM RESPONSABLE WHERE IDproyecto="+id+" AND Fecha_fin IS NULL;");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        if(res.next())
            r=(String) res.getObject("DNI");
       return r; 
    }
    
    public void procedureEditarProyecto (int id,int categoria, String nombre, 
                                      String descripcion,int estado,float sub,String pais) 
                                      throws Exception{

        proc = conn.prepareCall("{call editar_proyecto(?,?,?,?,?,?,?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setInt(2, id);
        proc.setInt(3, categoria);
        proc.setString(4, nombre);
        proc.setString(5, descripcion);
        proc.setInt(6, estado);
        proc.setFloat(7 ,sub);
        proc.setString(8, pais);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    
    public void procedureEnviarProyecto(int id) throws SQLException{
        proc = conn.prepareCall("{call enviar_proyecto(?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setInt(2, id);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    public void procedureAprobarProyecto(int id,float sub) throws SQLException{
        proc = conn.prepareCall("{call aprobar_proyecto(?,?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setInt(2, id);
        proc.setFloat(3, sub);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    public void procedureIniciarProyecto(int id) throws SQLException{
        proc = conn.prepareCall("{call iniciar_proyecto(?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setInt(2, id);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    public void procedureDenegarProyecto(int id) throws SQLException{
        proc = conn.prepareCall("{call denegar_proyecto(?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setInt(2, id);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    public void procedureCerrarProyecto(int id) throws SQLException{
        proc = conn.prepareCall("{call cerrar_proyecto(?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setInt(2, id);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    public void procedureFinalizarProyecto(int id) throws SQLException{
        proc = conn.prepareCall("{call finalizar_proyecto(?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setInt(2, id);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    
    
    //---------------------SOCIOS-----------------------//
           
    public ResultSet mostrarSocios() {
        try{
            query("SELECT s.personal_DNI, p.Nombre, p.Apellido1, p.Apellido2, s.Cuota, s.Perioricidad, s.Fecha_baja FROM socio s, personal p WHERE p.DNI = s.personal_DNI;");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        return res;
    }
    
    public ResultSet mostrarPagos(String dni) {
        try{
            query("SELECT Cantidad, FechaPago FROM pago WHERE personal_DNI = '"+dni+"';");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        return res;
    }
    
    public ResultSet obtenerDatosPersonalSocios(String dni){
        try{
            query("SELECT Fecha_nacimiento, Telefono, direccion, email FROM personal WHERE DNI = '"+dni+"';");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        return res;
        
    }
    
    public ResultSet obtenerDatosSocios(String dni){
        try{
            query("SELECT Datos_bancarios, Fecha_alta, " +
                    "Fecha_baja, Forma_pago FROM socio WHERE personal_DNI = '"+dni+"';");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        return res;
        
        
    }
    
    
    public ResultSet buscarSocio(String consulta) throws Exception{
            query(consulta);
            res = (ResultSet) getResultSentence();
            return res;
    }
    
    
    public String obtenerEstadoSocio(String dni) throws SQLException{
        
        String estado="";
        /*
        La idea es la siguiente:
         - Preguntamos si existe algún socio con el mismo dni que queremos buscar
            - Si no existe, devolvemos "No existe"
            - Si existe miramos si tiene puesta su fecha de fin a null
               - Si tiene su fecha de fin a null devolvemos "Activo"
               - En caso contrario devolvemos "Inactivo"
        */
        
        try {
            query("SELECT * FROM SOCIO WHERE personal_DNI='"+dni+"';");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        if(res.next() == false){ //Si no existe el estado es no existe
          //  System.out.println("noooooo");
            estado =  "No existe"; 
         }
        
        else{ //Si existe
            //System.out.println("siiiiiiiiii existe");
            try {
               query("SELECT * FROM SOCIO WHERE personal_DNI='"+dni+"' AND fecha_baja IS NULL;");
               res = (ResultSet) getResultSentence();
            }catch (Exception ex) { 
               Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
              } 
            
           if(res.next()) //El tío está aacctiiofaiovovoo
             estado = "Activo";
          
           else
             estado = "Inactivo";
        }
        return estado;
    }
    
    
    public void registrarBajaSocio(String dni) throws Exception{ 
        
        update("UPDATE SOCIO SET Fecha_baja = CURDATE() WHERE personal_DNI='"+dni+"';");
    }
    
    public void modificarFechaBaja(String dni) throws Exception{ 
        
        update("UPDATE SOCIO SET Fecha_baja = null WHERE personal_DNI='"+dni+"';");
    }
    
    public void registrarAltaSocio(String dni, float cuota, String per, String formapago, String datosbancarios)
            throws SQLException{
        
        try {
            query("SELECT * FROM personal WHERE DNI='"+dni+"' AND Fecha_baja IS NULL;");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        if(res.next()){ //Si no existe el estado es no existe
            System.out.println("Se intenta insertar");
            try{
            //update("INSERT INTO SOCIO (`ong`, `dni`, `cuota`, `perioricidad`, `forma_pago`, `datos_bancarios`) VALUES  (ong, "
                    //+dni+", "+cuota+", "+per+", "+FormaPago+", "+DatosBancarios+");");
                proc = conn.prepareCall("{call alta_socio(?,?,?,?,?,?)}");
                proc.registerOutParameter(1, java.sql.Types.INTEGER);
                proc.setString(2, dni);
                proc.setFloat(3, cuota);
                proc.setString(4, per);
                proc.setString(5, formapago);
                proc.setString(6, datosbancarios);
                proc.execute();
                resultProce = proc.getInt(1);
                if (resultProce == 1)
                    System.out.println("no debe entrar");
                else if (resultProce == -1)
                        System.out.println("debe entrar");
            }catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
            }
         }
         else
                System.out.println("No existe el dni");
         
        
    }
    
    public void registrarEdicionSocio(String dni, String dni_nuevo, float cuota, String per, String formapago, String datosbancarios)
            throws SQLException{
        
        try {
            query("SELECT * FROM socio WHERE personal_DNI='"+dni+"';");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        if(res.next()){ //Si no existe el estado es no existe
            System.out.println("Se intenta editar");
            try{
            //update("INSERT INTO SOCIO (`ong`, `dni`, `cuota`, `perioricidad`, `forma_pago`, `datos_bancarios`) VALUES  (ong, "
                    //+dni+", "+cuota+", "+per+", "+FormaPago+", "+DatosBancarios+");");
                proc = conn.prepareCall("{call editar_socio(?,?,?,?,?,?,?)}");
                proc.registerOutParameter(1, java.sql.Types.INTEGER);
                proc.setString(2, dni);
                proc.setString(3, dni_nuevo);
                proc.setFloat(4, cuota);
                proc.setString(5, per);
                proc.setString(6, formapago);
                proc.setString(7, datosbancarios);
                proc.execute();
                resultProce = proc.getInt(1);
                if (resultProce == 1)
                    System.out.println("no debe entrar");
                else if (resultProce == -1)
                        System.out.println("debe entrar");
            }catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
            }
         }
         else
                System.out.println("No existeeeeeee DNI");
         
        
    }
	
    public int registrarPagoSocio(String dni, float cuota, Date fpago)
            throws SQLException{
       /* try {
            query("SELECT * FROM socio WHERE personal_DNI="+dni+" AND Fecha_baja IS NULL;");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        if(res.next()){ //Si existe el dni como socio*/
            System.out.println("Se intenta insertar pago");
            try{
            //update("INSERT INTO SOCIO (`ong`, `dni`, `cuota`, `perioricidad`, `forma_pago`, `datos_bancarios`) VALUES  (ong, "
                    //+dni+", "+cuota+", "+per+", "+FormaPago+", "+DatosBancarios+");");
                proc = conn.prepareCall("{call registrar_pago_socio(?,?,?,?)}");
                proc.registerOutParameter(1, java.sql.Types.INTEGER);
                proc.setString(2, dni);                
                proc.setFloat(3, cuota);
                proc.setDate(4, fpago);
                proc.execute();
                resultProce = proc.getInt(1);
                if (resultProce == 1)
                    System.out.println("Se insertó el pago");
                else if (resultProce == -1)
                    System.out.println("Socio no existe");
                else if (resultProce == -2)
                    System.out.println("Socio ya realizó el pago");
            }catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
            }
            
            return resultProce;
         }
    
    
    //---------------------DONATIVOS-----------------------//
           
    public ResultSet mostrarDonativosNulos() {
        try{
            query("SELECT * FROM donativo;");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        return res;
    }
    
    public ResultSet mostrarDonativos() {
        try{
            query("SELECT d.personal_DNI, d.Cantidad, d.Fecha_Pago, p.Nombre, p.Apellido1, p.Apellido2 FROM donativo d, personal p WHERE d.personal_DNI = p.DNI;");
            res = (ResultSet) getResultSentence();
        } catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
        }
        return res;
    }
    
    
    public void registrarDonativo(float cantidad, Date fecha_pago, String dni) throws SQLException{
                    System.out.println("Se intenta insertar el donativo");
            try{
                proc = conn.prepareCall("{call registrar_donativo(?,?,?,?)}");
                proc.registerOutParameter(1, java.sql.Types.INTEGER);
                proc.setFloat(2, cantidad);
                proc.setDate(3, fecha_pago);
                if (dni.equals("null"))
                    proc.setNull(4, java.sql.Types.VARCHAR);  
                else
                    proc.setString(4, dni);  
                proc.execute();
                resultProce = proc.getInt(1);
                if (resultProce == 1)
                    System.out.println("Se insertó el donativo");
                else if (resultProce == -1)
                    System.out.println("No se puede insertar");
            }catch (Exception ex) {
            Logger.getLogger(AccessMysql.class.getName()).log(Level.SEVERE, null, ex);
            }
    }
    
    
    
    
    
    
    
    
    
    
    /*--------------------------------------------*/
    
    
    public ResultSet buscarProyectos(String consulta) throws Exception{
            query(consulta);
            res = (ResultSet) getResultSentence();
            return res;
    }
    
    public void procedureAñadirCategoria(String categ) throws SQLException{
        proc = conn.prepareCall("{call anadir_categoria(?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setString(2, categ);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    
    public void procedureEliminarCategoria(int  idCateg) throws SQLException{
        proc = conn.prepareCall("{call eliminar_categoria(?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setInt(2, idCateg);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    
    public void procedureActualizarCategoriasProy(int idCateg) throws Exception{
        update("UPDATE proyecto SET IDCategoria=null WHERE IDCategoria='" + 0+ "';");   
    }
    
    public ResultSet obtenerDatosONG() throws Exception{
            query("SELECT * FROM ong");
            res = (ResultSet) getResultSentence();
            return res;
    }
    
    public void procedureGuardarAcceso(String login,String pass,String dni,String perfil ) throws SQLException{
        proc = conn.prepareCall("{call guardar_acceso(?,?,?,?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setString(2, login);
        proc.setString(3, pass);
        proc.setString(4, dni);
        proc.setString(5, perfil);
        proc.execute();
        resultProce = proc.getInt(1);
    }
    
    public ResultSet obtenerDatosAcceso(String dni) throws Exception{
            query("SELECT * FROM Acceso WHERE personal_DNI='"+dni+"';");
            res = (ResultSet) getResultSentence();
            return res;
    }
    
    public void procedureActualizarOng(String direccion, String tfn, String email, String descripcion, String logo)
            throws SQLException{
        
        proc = conn.prepareCall("{call guardar_ong(?,?,?,?,?,?,?)}");
        proc.registerOutParameter(1, java.sql.Types.INTEGER);
        proc.setNull(2, java.sql.Types.VARCHAR);
        proc.setString(3, direccion);
        proc.setString(4, tfn);
        proc.setString(5, email);
        proc.setString(6, descripcion);
        proc.setString(7, logo);
        proc.execute();
        resultProce = proc.getInt(1);
    }


}
